﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


//namespace Assets.Script.Event
//{
    public interface IEvent
    {
        void AddListener(object key, Action handler);
        void AddListener<T>(object key, Action<T> handler);
        void AddListener<T, U>(object key, Action<T, U> handler);
        void AddListener<T, U, V>(object key, Action<T, U, V> handler);
        void AddListener<T, U, V, W>(object key, Action<T, U, V, W> handler);


        void RemoveListener(object key, Action handler);
        void RemoveListener<T>(object key, Action<T> handler);
        void RemoveListener<T, U>(object key, Action<T, U> handler);
        void RemoveListener<T, U, V>(object key, Action<T, U, V> handler);
        void RemoveListener<T, U, V, W>(object key, Action<T, U, V, W> handler);

        void Dispatch(object key);
        void Dispatch<T>(object key,T t);
        void Dispatch<T, U>(object key, T t, U u);
        void Dispatch<T, U, V>(object key, T t, U u, V v);
        void Dispatch<T, U, V, W>(object key, T t, U u, V v, W w);

    }
//}
